I have previously posted a patch with changes to the xenbus for being
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Fri, 3 Feb 2006 10:54:05 +0000 (11:54 +0100)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Fri, 3 Feb 2006 10:54:05 +0000 (11:54 +0100)
able to detect the reason why a frontend is created, which can be either
due to domain creation or a restore. The attached patch now puts this
functionality into XenD and allows driver implementations in Xend to
read the state and see whether a domain is currently being resumed or
created and write this value into the xenstore for hotplug scripts to
read it. The state of a domain being resumed is set when a
XendDomainInfo object is created and reset at the end of the restore
function.

Signed-off-by: Stefan Berger <stefanb@us.ibm.com>
tools/python/xen/xend/XendDomainInfo.py
tools/python/xen/xend/server/tpmif.py

index 014a308ca13a4e4f8e98e6ea0804f98a5657210e..7c572dedbb2721b7ebf932f4f174e344678b5da1 100644 (file)
@@ -251,13 +251,14 @@ def restore(config):
 
     log.debug("XendDomainInfo.restore(%s)", config)
 
-    vm = XendDomainInfo(parseConfig(config))
+    vm = XendDomainInfo(parseConfig(config), None, None, False, False, True)
     try:
         vm.construct()
         vm.storeVmDetails()
         vm.createDevices()
         vm.createChannels()
         vm.storeDomDetails()
+        vm.endRestore()
         return vm
     except:
         vm.destroy()
@@ -410,7 +411,7 @@ def dom_get(dom):
 class XendDomainInfo:
 
     def __init__(self, info, domid = None, dompath = None, augment = False,
-                 priv = False):
+                 priv = False, resume = False):
 
         self.info = info
 
@@ -445,6 +446,7 @@ class XendDomainInfo:
         self.state_updated = threading.Condition()
         self.refresh_shutdown_lock = threading.Condition()
 
+        self.setResume(resume)
 
     ## private:
 
@@ -758,6 +760,14 @@ class XendDomainInfo:
         """Get this domain's target memory size, in KB."""
         return self.info['memory'] * 1024
 
+    def getResume(self):
+        return "%s" % self.info['resume']
+
+    def endRestore(self):
+        self.setResume(False)
+
+    def setResume(self, state):
+        self.info['resume'] = state
 
     def refreshShutdown(self, xeninfo = None):
         # If set at the end of this method, a restart is required, with the
index a34e598eab5da55735cb1fc6e0be9eeebdb28bd5..aa810390df96f627f0eb5eda302aa9c5f4a6ad4e 100644 (file)
@@ -45,7 +45,8 @@ class TPMifController(DevController):
 
         log.info("The domain has a TPM with instance %d and devid %d.",
                  inst, devid)
-        back  = { 'pref_instance' : "%i" % inst }
+        back  = { 'pref_instance' : "%i" % inst,
+                  'resume'        : "%s" % (self.vm.getResume()) }
         front = { 'handle' : "%i" % devid }
 
         return (devid, back, front)